#!/usr/bin/env php
<?php
/**
 * 入口文件
 *
 * @author mybsdc <mybsdc@gmail.com>
 * @date 2019/3/2
 * @time 11:05
 * @link https://github.com/luolongfei/freenom
 */

error_reporting(E_ERROR);
ini_set('display_errors', 1);
set_time_limit(0);

define('IS_CLI', PHP_SAPI === 'cli');
define('DS', DIRECTORY_SEPARATOR);
define('ROOT_PATH', realpath(__DIR__));
define('VENDOR_PATH', realpath(ROOT_PATH . '/vendor'));
define('APP_PATH', realpath(ROOT_PATH . '/app'));
define('RESOURCES_PATH', realpath(ROOT_PATH . '/resources'));

date_default_timezone_set('Asia/Shanghai');

/**
 * 注册错误处理
 */
register_shutdown_function('customize_error_handler');

/**
 * 注册异常处理
 */
set_exception_handler('exception_handler');

require VENDOR_PATH . '/autoload.php';

use Luolongfei\Lib\Log;
use Luolongfei\Lib\Mail;
use Luolongfei\Lib\TelegramBot;

/**
 * @throws Exception
 */
function customize_error_handler()
{
    if (!is_null($error = error_get_last())) {
        Log::error('程序意外终止', $error);
//        Mail::send('主人，程序意外终止', '具体情况我也不清楚，请查看服务器日志定位问题。');
//        TelegramBot::send('主人，程序意外终止，具体情况我也不清楚，请查看服务器日志定位问题。');
    }
}

/**
 * @param \Exception $e
 *
 * @throws \Exception
 */
function exception_handler($e)
{
    Log::error('未捕获的异常：' . $e->getMessage());
    Mail::send('主人，未捕获的异常', "具体的异常内容是：\n" . $e->getMessage());
    TelegramBot::send('主人，发现未捕获的异常：' . $e->getMessage());
}

try {
    system_check();

    $class = sprintf('Luolongfei\App\Console\%s', get_argv('c', 'FreeNom'));
    $fn = get_argv('m', 'handle');

    $class::instance()->$fn();
} catch (\Exception $e) {
    system_log(sprintf('执行出错：<red>%s</red>', $e->getMessage()), $e->getTrace());
}
